package dao;

import model.Student;
import util.DBUtil;

import java.sql.*;

public class StudentDao {

    // 登录验证：根据学号和密码查询学生，成功返回学生对象，失败返回null
    public Student login(String studentId, String password) {
        String sql = "SELECT * FROM student WHERE student_id = ? AND password = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, studentId);   // 设置第一个参数为学号
            ps.setString(2, password);    // 设置第二个参数为密码
            ResultSet rs = ps.executeQuery(); // 执行查询
            if (rs.next()) { // 如果查询结果有数据
                return extractStudent(rs); // 提取学生信息返回
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null; // 登录失败返回null
    }

    // 添加学生：将学生对象信息插入数据库，成功返回true，失败false
    public boolean addStudent(Student stu) {
        String sql = "INSERT INTO student (student_id, name, gender, grade, major, password) VALUES (?, ?, ?, ?, ?, ?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, stu.getStudentId()); // 学号
            ps.setString(2, stu.getName());      // 姓名
            ps.setString(3, stu.getGender());    // 性别
            ps.setString(4, stu.getGrade());     // 年级
            ps.setString(5, stu.getMajor());     // 专业
            ps.setString(6, stu.getPassword());  // 密码
            return ps.executeUpdate() > 0;       // 执行插入，返回是否成功
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


    // 私有工具方法：从结果集提取学生对象的字段值
    private Student extractStudent(ResultSet rs) throws SQLException {
        Student stu = new Student();
        stu.setStudentId(rs.getString("student_id")); // 学号
        stu.setName(rs.getString("name"));             // 姓名
        stu.setGender(rs.getString("gender"));         // 性别
        stu.setGrade(rs.getString("grade"));           // 年级
        stu.setMajor(rs.getString("major"));           // 专业
        stu.setPassword(rs.getString("password"));     // 密码
        return stu;
    }
}
